package com.iflytek.jobs.service.service.impl;

import cn.hutool.core.convert.Convert;
import com.iflytek.jobs.service.domain.StuInfo;
import com.iflytek.jobs.service.mapper.StuInfoMapper;
import com.iflytek.jobs.service.service.IStuInfoService;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 学生信息Service业务层处理
 * 
 * @author chenhs
 * @date 2023-04-07
 */
@Service
public class StuInfoServiceImpl implements IStuInfoService {
    @Autowired
    private StuInfoMapper stuInfoMapper;
    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private ISysDeptService deptService;

    /**
     * 查询学生信息
     * 
     * @param stuId 学生信息主键
     * @return 学生信息
     */
    @Override
    public StuInfo selectStuInfoByStuId(String stuId) {
        return stuInfoMapper.selectStuInfoByStuId(stuId);
    }

    /**
     * 查询学生信息列表
     * 
     * @param stuInfo 学生信息
     * @return 学生信息
     */
    @Override
    public List<StuInfo> selectStuInfoList(StuInfo stuInfo) {
        return stuInfoMapper.selectStuInfoList(stuInfo);
    }

    /**
     * 新增学生信息
     * 
     * @param stuInfo 学生信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertStuInfo(StuInfo stuInfo) {
        // 判断是否已经存在
        String stuNo = stuInfo.getStuNo();
        if (stuInfoMapper.selectByStuNo(stuNo) == null) {
            // 存入登录表
            SysUser user = new SysUser();
            user.setUserName(stuNo);
            user.setNickName(stuInfo.getStuName());
            // 查找部门id
            SysDept dept = new SysDept();
            dept.setDeptName(stuInfo.getDept().getDeptName());
            Long deptId = deptService.selectDeptList(dept).get(0).getDeptId();
            user.setDeptId(deptId);
            user.setPassword(SecurityUtils.encryptPassword("123456"));
            Long[] role = { 102L };
            user.setRoleIds(role);
            sysUserService.insertUser(user);
            // 存入学生表
            stuInfo.setStuClass(Convert.toInt(deptId));
            stuInfo.setCreateTime(DateUtils.getNowDate());
            stuInfo.setUserId(Convert.toInt(user.getUserId()));
            int i = stuInfoMapper.insertStuInfo(stuInfo);
            return i;
        }else{
            return 1;
        }
    }

    /**
     * 修改学生信息
     * 
     * @param stuInfo 学生信息
     * @return 结果
     */
    @Override
    public int updateStuInfo(StuInfo stuInfo) {
        stuInfo.setUpdateTime(DateUtils.getNowDate());
        return stuInfoMapper.updateStuInfo(stuInfo);
    }

    /**
     * 批量删除学生信息
     * 
     * @param stuIds 需要删除的学生信息主键
     * @return 结果
     */
    @Override
    public int deleteStuInfoByStuIds(String[] stuIds) {

        return stuInfoMapper.deleteStuInfoByStuIds(stuIds);
    }

    /**
     * 删除学生信息信息
     * 
     * @param stuId 学生信息主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteStuInfoByStuId(String stuId) {
        StuInfo stuInfo = selectStuInfoByStuId(stuId);
        sysUserService.deleteUserById(Convert.toLong(stuInfo.getUserId()));
        return stuInfoMapper.deleteStuInfoByStuId(stuId);
    }

    @Override
    public List<StuInfo> selectByStuNos(List<String> stuNos) {
        return stuInfoMapper.selectByStuNos(stuNos);
    }
}
